package org.wdcode.common.codec;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.wdcode.common.constants.EncryptConstants;
import org.wdcode.common.exception.CustomRuntimeException;

/**
 * 不可逆加密
 * @author WD
 * @since JDK6
 * @version 1.0 2010-07-07
 */
public final class Crypto extends BaseCrypt {
	/**
	 * 使用HMAC-SHA1进行消息签名, 返回字节数组,长度为20字节.
	 * @param text 原始输入字符串
	 */
	public final static String hmacSha1(String text) {
		try {
			// 实例化SecretKey
			SecretKey secretKey = new SecretKeySpec(KEY, EncryptConstants.ALGO_HMAC_SHA1);
			// 获得Mac
			Mac mac = Mac.getInstance(EncryptConstants.ALGO_HMAC_SHA1);
			// 初始化算法
			mac.init(secretKey);
			// 返回加密串
			return Encode.hex(mac.doFinal(text.getBytes()));
		} catch (Exception e) {
			throw new CustomRuntimeException(e);
		}
	}

	/**
	 * 加密密码用 先普通加密 在获得摘要
	 * @param password 要加密的密码
	 * @return 加密后的密码
	 */
	public final static String getPassword(String password) {
		return absoluteEncrypt(password);
	}

	/**
	 * 先普通加密 在获得摘要 无法解密
	 * @param text 要加密的文本
	 * @return 加密后的文本
	 */
	public final static String absoluteEncrypt(String text) {
		return Digest.digestHex(Encrypt.encrypt(text));
	}

	/**
	 * 私有构造
	 */
	private Crypto() {}
}
